home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / css / source / gfsel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  16.8 KB  |  427 lines

  1.  
  2. #include  <stdio.h>
  3.  
  4. #include  <search.h>
  5. #include  <dos.h>
  6. #include  <direct.h>
  7. #include  <stdio.h>
  8. #include  <string.h>
  9. #include  <jstring.h>
  10.  
  11. #include <glib.h>
  12.  
  13. #include "init.h"
  14.  
  15. union  REGS  inregs, outregs;
  16. struct SREGS segregs;
  17. extern int   _DENGEROUS; /* 致命的エラー・フラグ   0 なら正常 */
  18.  
  19.  
  20. /* xy  check     return( yes=1, no=0 ) */
  21. int gfs_xychk(int x, int y, int x1, int y1, int x2, int y2)
  22. {
  23.     if (x1<=x && x<=x2 && y1<=y && y<=y2) return(1);
  24.     return(0);
  25. }
  26.  
  27. #define MAXFILE 128 /* 最大表示ファイル数 */
  28. /*
  29.    x, y = location x, y
  30.    return normal(実行) = 0, esc(取消) = -1
  31.    fselnam = ファイル・セレクターの名称
  32.    dirnam = ディレクトリ,  fnam = ファイル
  33. */
  34. int gfsel(int x, int y, char fselnam[], char dirnam[], char fnam[])
  35. {
  36. char dirbak[128], fnambak[13], dirwork[128];
  37. int drnbak;
  38. char drnam[3], flnam[13], fbuf[MAXFILE][13];
  39. int  i, j, k, dircnt, inp1, pg, pgend, fsetno, dsetno, fend, fflag;
  40. unsigned drn, maxdr=0, maxdrive = 16; /* maxdrive は最大ドライブ数 */
  41. struct find_t dirbuf;
  42. char strw[16], *strww;
  43.  
  44. unsigned  ddadr[2];
  45. unsigned char page;
  46. char      buf[27200]; /* (160*340+7)/8*4  図形バッファ */
  47. char      chrbuf[500], atrbuf[2000]; /* キャラクタ・バッファ */
  48.  
  49. int mx, my, com, lx, ly;
  50.  
  51. struct diskfree_t stat;
  52. float             dfree;
  53.  
  54. union body {
  55.    unsigned long  dword;
  56.    unsigned short word[2];
  57. }  pcvt;
  58. char far *farchr;
  59.  
  60.    x = x /  8 *  8;
  61.    y = y / 16 * 16;
  62.    
  63.    /* 文字データ退避 */
  64.    VDB_rdarea( 1, x/8, y/16, x/8+20, y/16+21, chrbuf, atrbuf); 
  65.    VDB_clrarea(x/8, y/16, x/8+20, y/16+21); /* 矩形域消去 */
  66.    
  67.    color(0, 0);
  68.    page = 0;
  69.    BSETDATAADR(ddadr,  buf);
  70.    GDS_getBlock(ddadr[0],  ddadr[1],  page, x,  y, x+154, y+335);
  71.    
  72.    /* 入力位置 */
  73.    lx = (x+5+5) /  8;  /* x は  8 の倍数でなければならない。 */
  74.    ly = (y+272) / 16;  /* y は 16 の倍数でなければならない。 */
  75.    
  76.    /* ウインドゥ */
  77.    line(x, y, x+148, y+329, PSET, 7, 2, 0xffff);
  78.    line(x, y, x+148, y+329, PSET, 1, 1, 0xffff);
  79.    line(x, y, x+148, y+20,  PSET, 1, 2, 0xffff);
  80.    line(x+149, y+5, x+154, y+335, PSET, 0, 2, 0xffff);
  81.    line(x+5, y+330, x+154, y+335, PSET, 0, 2, 0xffff);
  82.    symbol_(x+5, y+2, fselnam, 1, 1, 14, 0, PSET);
  83.  
  84.    /* ドライブ名表示 */
  85.    inregs.h.ah = 0x52; /* ファンクション・コード 内部変数領域番地獲得 */
  86.    intdosx(&inregs, &outregs, &segregs);
  87.    pcvt.word[1] = segregs.es;
  88.    pcvt.word[0] = outregs.x.bx;
  89.    farchr = (char far *)pcvt.dword;
  90.    maxdrive = *(farchr+0x20);
  91.    if (maxdrive > 16) maxdrive = 16;
  92.    
  93.    line(x+5, y+25, x+145, y+45, PSET,  0, 1, 0xffff);
  94.    line(x+5, y+25, x+145, y+25, PSET, 15, 0, 0xffff);
  95.    line(x+5, y+25, x+5,   y+45, PSET, 15, 0, 0xffff);
  96.    strw[1] = 0;
  97.    for (i = 0; i < maxdrive; i++) {
  98.       if (TOWNS == 0 || i != 2) { /* 機種がTOWNSの場合 C ドライブは無効 */
  99.          strw[0] = 'A'+i;
  100.          symbol(x+7+8*i, y+27, strw, 1, 2, 0, 0, PSET);
  101.       }
  102.    }
  103.    
  104.    /* ディレクトリ表示欄 */
  105.    line(x+5, y+50, x+119, y+68, PSET, 0, 1, 0xffff);
  106.    line(x+121, y+50, x+137, y+68, PSET, 0, 1, 0xffff);
  107.    line(x+121, y+50, x+137, y+50, PSET, 15, 0, 0xffff);
  108.    line(x+121, y+50, x+121, y+68, PSET, 15, 1, 0xffff);
  109.    symbol_(x+122, y+50, "↑", 1, 1, 0, 0, PSET);
  110.  
  111.    /* _dos_getdrive(&drn); */
  112.    
  113.    /* 前頁・後頁 */
  114.    line(x+73, y+73, x+104, y+89, PSET, 0, 1, 0xffff);
  115.    line(x+73, y+73, x+104, y+73, PSET, 15, 0, 0xffff);
  116.    line(x+73, y+73, x+ 73, y+89, PSET, 15, 0, 0xffff);
  117.    line(x+106, y+73, x+137, y+89, PSET, 0, 1, 0xffff);
  118.    line(x+106, y+73, x+137, y+73, PSET, 15, 0, 0xffff);
  119.    line(x+106, y+73, x+106, y+89, PSET, 15, 0, 0xffff);
  120.    symbol_(x+74, y+73, "前頁", 1, 1, 0, 0, PSET);
  121.    symbol_(x+107, y+73, "後頁", 1, 1, 0, 0, PSET);
  122.    
  123.    /* ディスク残容量 */
  124.    line(x+5, y+73, x+71, y+89, PSET, 0, 1, 0xffff);
  125.    
  126.    /* ファイル表示一欄 */
  127.    line(x+5, y+91, x+121, y+263, PSET,  0, 1, 0xffff);
  128.    line(x+5, y+91, x+121, y+ 91, PSET, 15, 0, 0xffff);
  129.    line(x+5, y+91, x+5  , y+263, PSET, 15, 0, 0xffff);
  130.  
  131.    /* スクロール・バー */
  132.    line(x+121, y+91, x+137, y+263, PSET, 0, 1, 0xffff);
  133.  
  134.    /* ファイル名表示欄 (入力欄) */
  135.    line(x+5, y+269, x+105, y+289, PSET, 0, 1, 0xffff);
  136.    line(x+5, y+269, x+105, y+269, PSET, 15, 0, 0xffff);
  137.    line(x+5, y+269, x+5,   y+289, PSET, 15, 0, 0xffff);
  138.    locate(lx, ly, COFF);
  139.    printf("%s\n", fnam);
  140.  
  141.    /* 実行・取消 */
  142.    line(x+60, y+299, x+96, y+317, PSET, 0, 1, 0xffff);
  143.    line(x+60, y+299, x+96, y+299, PSET, 15, 0, 0xffff);
  144.    line(x+60, y+299, x+60, y+317, PSET, 15, 0, 0xffff);
  145.    line(x+101, y+299, x+137, y+317, PSET, 0, 1, 0xffff);
  146.    line(x+101, y+299, x+137, y+299, PSET, 15, 0, 0xffff);
  147.    line(x+101, y+299, x+101, y+317, PSET, 15, 0, 0xffff);
  148.    symbol_(x+63, y+299, "実行", 1, 1, 0, 0, PSET);
  149.    symbol_(x+104, y+299, "取消", 1, 1, 0, 0, PSET);
  150.  
  151.    strcpy(fnambak, fnam); /* バックアップ */
  152.    strcpy(dirbak, dirnam); /* バックアップ */
  153.    getcwd(dirnam, 64); /* カレント・ディレクトリ */
  154.    dsetno = dirnam[0]-'A'; /* ドライブ番号 */
  155.    drnbak = dsetno;
  156.    
  157.    /* _dos_setdrive(dsetno+1, &maxdr); / * ドライブ設定 & 使用可能なドライブ数取得 */
  158.                             /*  ↑実際には使用可能なドライブが返ってこない。バグ? */
  159.    
  160.    fflag = 1;
  161.    for (;;) { /* loop */
  162.       if (fflag == 1) { /* 条件成立ならディレクトリ・ファイル検索 */
  163.          getcwd(dirnam, 64);
  164.          if (_DENGEROUS != 0) { /* 致命的エラー・フラグ   0 なら正常 */
  165.             line(x+6, y+74, x+70, y+88, PSET, 7, 2, 0xffff); /* ディスク残容量表示消去 */
  166.             line(x+6, y+51, x+118, y+67, PSET, 7, 2, 0xffff); /* ディレクトリ表示消去 */
  167.             line(x+6, y+92, x+120, y+262, PSET, 7, 2, 0xffff); /* ファイル一覧消去 */
  168.             line(x+122, y+92, x+136, y+262, PSET, 8, 2, 0xffff); /* スクロール・バー消去 */
  169.             fflag = 90;
  170.             continue; /* エラー発生ならコマンド選択 */
  171.          }
  172.          strw[0] = 'A'+dsetno; strw[1] = 0;
  173.          line(x+7+8*dsetno, y+27, x+15+8*dsetno, y+42, PSET, 7, 2, 0xffff);
  174.          symbol(x+7+8*dsetno, y+27, strw, 1, 2, 0, 0, PSET); /* ドライブ名消去 */
  175.  
  176.          strcpy(dirwork, dirnam); /* カレント・ディレクトリ退避 */
  177.          dsetno = dirnam[0]-'A'; /* ドライブ番号 */
  178.          line(x+7+8*dsetno, y+27, x+15+8*dsetno, y+42, XOR, 15, 2, 0xffff); /* ドライブ名設定 */
  179.          _dos_getdiskfree(0, &stat);
  180.          dfree = (float)stat.avail_clusters * (float)stat.sectors_per_cluster * (float)stat.bytes_per_sector;
  181.          dfree = dfree / 1024.0;
  182.          if (dfree > 1024.0) {
  183.             dfree = dfree / 1024.0;
  184.             sprintf(strw, "%6.1fMB", dfree);
  185.          } else {
  186.             sprintf(strw, "%6.1fKB", dfree);
  187.          }
  188.          /* ディスク残容量表示 */
  189.          line(x+6, y+74, x+70, y+88, PSET, 7, 2, 0xffff);
  190.          symbol(x+7, y+73, strw, 1, 2, 0, 0, PSET);
  191.       }
  192.       if (fflag <= 2) {
  193.          getcwd(dirnam, 64);
  194.          /* サブ・ディレクトリ 検索 */
  195.          i = 0;
  196.          strcpy(flnam, "*.*");
  197.          if ( _dos_findfirst( flnam, _A_SUBDIR, &dirbuf ) == 0 && (dirbuf.attrib & _A_SUBDIR) != 0) {
  198.             strcpy(fbuf[i], dirbuf.name);
  199.             i++;
  200.          }
  201.          while ( _dos_findnext(&dirbuf) == 0 && i < MAXFILE) {
  202.             if ( ( dirbuf.attrib & _A_SUBDIR ) != 0 ) {
  203.                strcpy(fbuf[i], dirbuf.name);
  204.                i++;
  205.             }
  206.          }
  207.          dircnt = i; /* サブ・ディレクトリの数 */
  208.          qsort(fbuf[0], dircnt, 13, jstrcmp);
  209.    
  210.          /* ファイル検索 */
  211.          strcpy(flnam, "*.*"); /* *.xxx */
  212.          if ( _dos_findfirst( flnam, _A_NORMAL, &dirbuf) == 0 && i < MAXFILE) {
  213.             strcpy(fbuf[i], dirbuf.name);
  214.             i++;
  215.          }
  216.          while ( _dos_findnext(&dirbuf) == 0 && i < MAXFILE) {
  217.             strcpy(fbuf[i], dirbuf.name);
  218.             i++;
  219.          }
  220.          fend = i; /* ファイルの数 */
  221.          if (i == 0) pgend = 0;                /* 終了頁 ファイルが 0 ならば 1 頁 */
  222.          else        pgend = (fend - 1) / 10;  /* 終了頁 */
  223.          qsort(fbuf[dircnt], fend-dircnt, 13, jstrcmp);
  224.  
  225.          pg = 0; fsetno = 0;
  226.          line(x+6, y+51, x+118, y+67, PSET, 7, 2, 0xffff); /* ディレクトリ表示消去 */
  227.          strww = strrchr(dirnam, '\\');
  228.          symbol_(x+7, y+51, strww+1, 1, 1, 0, 0, PSET);
  229.       }
  230.       
  231.       if ((fflag <= 3) || (fflag == 30)) { /* 条件成立ならファイル表示 */
  232.          line(x+122, y+92, x+136, y+262, PSET, 8, 2, 0xffff); /* スクロール・バー消去 */
  233.          i = 170 / (pgend + 1);
  234.          if (pg != pgend) {
  235.             line(x+123, y+93+i*pg, x+135, y+91+i*(pg+1), PSET,  7, 2, 0xffff);
  236.             line(x+123, y+93+i*pg, x+135, y+91+i*(pg+1), PSET,  0, 1, 0xffff);
  237.             line(x+123, y+93+i*pg, x+135, y+93+i*pg,   PSET, 15, 0, 0xffff);
  238.             line(x+123, y+93+i*pg, x+123, y+91+i*(pg+1), PSET, 15, 0, 0xffff);
  239.          } else {
  240.             line(x+123, y+93+i*pg, x+135, y+261, PSET, 7, 2, 0xffff);
  241.             line(x+123, y+93+i*pg, x+135, y+261, PSET, 0, 1, 0xffff);
  242.             line(x+123, y+93+i*pg, x+135, y+93+i*pg, PSET, 15, 0, 0xffff);
  243.             line(x+123, y+93+i*pg, x+123, y+261, PSET, 15, 0, 0xffff);
  244.          }
  245.  
  246.          line(x+6, y+92, x+120, y+262, PSET, 7, 2, 0xffff); /* ファイル一覧消去 */
  247.          k = 10*pg;
  248.          for (i = k; i < k+10; i++) {
  249.             if (i < fend) {
  250.                if (i < dircnt) sprintf(strw, "<%s>\n", fbuf[i]); /* directry */
  251.                else               sprintf(strw, "%s\n",   fbuf[i]); /* file     */
  252.                symbol_(x+7, y+93+17*(i-k), strw, 1, 1, 0, 0, PSET);
  253.             }
  254.          }
  255.       }
  256.       
  257.       if (fflag == 4) { /* 条件成立ならファイル名入力 */
  258.       /*  MOS_disp(1); */
  259.          locate(lx, ly, CON);
  260.          i = sedline( lx, ly, fnam, 12);
  261.          locate(lx, ly, COFF);
  262.       /*  MOS_disp(0); */
  263.       /* 
  264.          if (i == 0x1b) { 
  265.              GDS_putBlock(ddadr[0],  ddadr[1],  page, x,  y, x+154, y+335, PSET);
  266.              return(0);
  267.          }
  268.          i = strlen(fnam);
  269.       */
  270.       }
  271.       
  272.       if (fflag == 99 || fflag == 98) {
  273.          /* グラフィック・データ復帰 */
  274.          GDS_putBlock(ddadr[0],  ddadr[1],  page, x,  y, x+154, y+335, PSET);
  275.          /* 文字データ復帰 */
  276.          VDB_setarea( 1, x/8, y/16, x/8+20, y/16+21, chrbuf, atrbuf);
  277.          color(7, 0);
  278.          locate(0, 0, CON);
  279.          chdir(dirwork); /* カレント・ディレクトリ復帰 */
  280.          _dos_setdrive((unsigned)(drnbak+1), &maxdr); /* カレント・ドライブ復帰 */
  281.          if (fflag == 99) return(0);  /* 実行 */
  282.          if (fflag == 98) { /* 取消 */
  283.             strcpy(dirnam, dirbak);
  284.             strcpy(fnam, fnambak);
  285.             return(-1);
  286.          }
  287.       }
  288.       
  289.       /* コマンド選択 */
  290.       fflag = 0;
  291.       while (fflag == 0) {
  292.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  293.          for (;;) {
  294.             if (gfs_xychk(mx, my, x+7,  y+25, x+14+8*15, y+45) != 0) { /* ドライブ変更 A~P */
  295.                for(i = 0; i < maxdrive; i++) {
  296.                   if (gfs_xychk(mx, my, x+7+8*i, y+25, x+14+8*i, y+45) != 0) break;
  297.                }
  298.                if (i == maxdrive) break;
  299.                if (TOWNS == 1 && i == 2) break; /* TOWNSの場合には C ドライブが使用不可 */
  300.                line(x+7+8*dsetno, y+27, x+15+8*dsetno, y+42, XOR, 15, 2, 0xffff); /* 前ドライブ消去 */
  301.                line(x+7+8*i, y+27, x+15+8*i, y+42, XOR, 15, 2, 0xffff); /* ドライブ設定 */
  302.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  303.                if (gfs_xychk(mx, my, x+7+8*i, y+25, x+14+8*i, y+45) == 0) {
  304.                   line(x+7+8*i, y+27, x+15+8*i, y+42, XOR, 15, 2, 0xffff);
  305.                   line(x+7+8*dsetno, y+27, x+15+8*dsetno, y+42, XOR, 15, 2, 0xffff);
  306.                   break;
  307.                }
  308.                if (_DENGEROUS != 0) _DENGEROUS = 0;
  309.                else                 chdir(dirwork); /* ドライブ変更の場合はカレント・ディレクトリ復帰 */
  310.                dsetno = i;
  311.                _dos_setdrive(dsetno+1, &maxdr); /* ドライブ設定 */
  312.                /*
  313.                locate(0, 0, COFF);
  314.                printf("%d\n", maxdr); 最大論理ドライブ印字。但しバグのため26だけ返る
  315.                */
  316.                fflag = 1;
  317.                break;
  318.             }
  319.             if (_DENGEROUS != 0) break; /* ドライブ選択エラー発生の場合は正しいドライブに変更が必要 */
  320.  
  321.             if (gfs_xychk(mx, my, x+121, y+50, x+137, y+68) != 0) { /* ディレクトリ・アップ */
  322.                line(x+121, y+50, x+137, y+68, XOR, 15, 1, 0xffff);
  323.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  324.                line(x+121, y+50, x+137, y+68, XOR, 15, 1, 0xffff);
  325.                if (gfs_xychk(mx, my, x+121, y+50, x+137, y+68) == 0) break;
  326.                chdir(".."); /* ディレクトリ・アップ */
  327.                fflag = 2;
  328.                break;
  329.             }
  330.             if (gfs_xychk(mx, my, x+73, y+73, x+104, y+89) != 0) { /* 前頁 */
  331.                line(x+73, y+73, x+104, y+89, XOR, 15, 1, 0xffff);
  332.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  333.                line(x+73, y+73, x+104, y+89, XOR, 15, 1, 0xffff);
  334.                if (gfs_xychk(mx, my, x+73, y+73, x+104, y+89) == 0) break;
  335.                if (pg != 0) {
  336.                   pg--;
  337.                   fflag = 30;
  338.                }
  339.                break;
  340.             }
  341.             if (gfs_xychk(mx, my, x+106, y+73, x+137, y+89) != 0) { /* 後頁 */
  342.                line(x+106, y+73, x+137, y+89, XOR, 15, 1, 0xffff);
  343.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  344.                line(x+106, y+73, x+137, y+89, XOR, 15, 1, 0xffff);
  345.                if (gfs_xychk(mx, my, x+106, y+73, x+137, y+89) == 0) break;
  346.                if (pg < pgend) {
  347.                   pg++;
  348.                   fflag = 30;
  349.                }
  350.                break;
  351.             }
  352.             if (gfs_xychk(mx, my, x+5, y+92, x+120, y+263) != 0) { /* ファイル表示一欄 */
  353.                k = 10*pg;
  354.                for (i = k; i < k+10; i++) {
  355.                   j = i - k;
  356.                   if (gfs_xychk(mx, my, x+5, y+92+17*j, x+120, y+92+17*(j+1)) != 0) break;
  357.                }
  358.                if (i >= fend) break;
  359.                line(x+6, y+92+17*j, x+120, y+92+17*(j+1), XOR, 15, 2, 0xffff); /* ファイル反転 */
  360.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  361.                line(x+6, y+92+17*j, x+120, y+92+17*(j+1), XOR, 15, 2, 0xffff); /* ファイル反転 */
  362.                if (gfs_xychk(mx, my, x+5, y+92+17*j, x+120, y+92+17*(j+1)) == 0) {
  363.                   break;
  364.                }
  365.                if ( i < dircnt) { /* ディレクトリなら変更 */
  366.                   chdir(fbuf[i]);
  367.                   pg = 0;
  368.                   fflag = 2;
  369.                } else {
  370.                   strcpy(fnam, fbuf[i]);
  371.                   locate(lx, ly, COFF);
  372.                   printf("            \n");
  373.                   locate(lx, ly, COFF);
  374.                   printf("%s\n", fnam);
  375.                }
  376.                break;
  377.             }
  378.             
  379.             if (gfs_xychk(mx, my, x+121, y+92, x+137, y+263) != 0) { /* スクロール・バー */
  380.                line(x+122, y+92, x+136, y+262, PSET, 8, 2, 0xffff); /* スクロール・バー消去 */
  381.                i = 170 / (pgend + 1);
  382.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  383.                for (j = 0; j <= pgend; j++) {
  384.                   if (gfs_xychk(mx, my, x+121, y+92+i*j, x+137, y+92+i*(j+1)) != 0) break;
  385.                }
  386.                if (j > pgend) { /* 頁変更無し */
  387.                   fflag = 30;
  388.                   break;
  389.                }
  390.                if (pg != pgend) line(x+122, y+92+i*j, x+136, y+92+i*(j+1), PSET, 7, 2, 0xffff);
  391.                else             line(x+122, y+92+i*j, x+136, y+262, PSET, 7, 2, 0xffff);
  392.                pg = j;
  393.                fflag = 30;
  394.                break;
  395.             }
  396.             if (gfs_xychk(mx, my, x+5, y+271, x+105, y+291) != 0) { /* ファイル名表示欄 (入力欄) */
  397.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  398.                if (gfs_xychk(mx, my, x+5, y+271, x+105, y+291) == 0) break;
  399.                fflag = 4;
  400.             }
  401.             if (gfs_xychk(mx, my, x+60, y+299, x+96, y+317) != 0) { /* 実行 */
  402.                line(x+60, y+299, x+96, y+317, XOR, 15, 1, 0xffff);
  403.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  404.                line(x+60, y+299, x+96, y+317, XOR, 15, 1, 0xffff);
  405.                if (gfs_xychk(mx, my, x+59, y+299, x+95, y+317) == 0) {
  406.                   break;
  407.                }
  408.                fflag = 99;
  409.                break;
  410.             }
  411.             if (gfs_xychk(mx, my, x+101, y+299, x+137, y+317) != 0) { /* 取消 */
  412.                line(x+101, y+299, x+137, y+317, XOR, 15, 1, 0xffff);
  413.                while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  414.                line(x+101, y+299, x+137, y+317, XOR, 15, 1, 0xffff);
  415.                if (gfs_xychk(mx, my, x+101, y+299, x+137, y+317) == 0) {
  416.                   break;
  417.                }
  418.                fflag = 98;
  419.                break;
  420.             }
  421.             break;
  422.          }
  423.       } /* wend  fflag == 0 */
  424.    } /* loop end */
  425. } /* end */
  426.  
  427.